using WeatherSystem.API.Models;

namespace WeatherSystem.API.CQRS.Queries
{
    public class GetWeatherDataByIdQuery : IQuery<WeatherDataEntry?>
    {
        public Guid Id { get; set; }
    }

    public class GetWeatherDataPagedQuery : IQuery<PagedResult<Dictionary<string, object>>>
    {
        public int Page { get; set; } = 1;
        public int PageSize { get; set; } = 20;
        public Guid? CityId { get; set; }
        public DateTime? StartDate { get; set; }
        public DateTime? EndDate { get; set; }
    }

    public class GetCitiesQuery : IQuery<PagedResult<City>>
    {
        public int Page { get; set; } = 1;
        public int PageSize { get; set; } = 20;
        public string? CountryCode { get; set; }
        public string? SearchTerm { get; set; }
    }

    public class GetCityByIdQuery : IQuery<City?>
    {
        public Guid Id { get; set; }
    }

    public class GetWeatherStatsQuery : IQuery<object>
    {
        public Guid? CityId { get; set; }
        public DateTime? StartDate { get; set; }
        public DateTime? EndDate { get; set; }
        public string? MetricName { get; set; }
    }

    public class GetMetricDefinitionsQuery : IQuery<PagedResult<MetricDefinition>>
    {
        public int Page { get; set; } = 1;
        public int PageSize { get; set; } = 20;
        public bool? IsActive { get; set; }
    }

    public class GetUserByIdQuery : IQuery<User?>
    {
        public Guid Id { get; set; }
    }

    public class GetUsersPagedQuery : IQuery<PagedResult<User>>
    {
        public int Page { get; set; } = 1;
        public int PageSize { get; set; } = 20;
        public string? Role { get; set; }
        public string? SearchTerm { get; set; }
    }
}